package com.foreknow.controller;

import com.foreknow.model.Admin;
import com.foreknow.service.AdminService;
import com.foreknow.service.impl.AdminServiceimpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

///**
// * 什么是Servlet：就是一个服务器端的应用程序
// * 作用：
// * 1.可以读取客户端发送的所有数据
// * 2.查询http请求中包含的任何其它信息(获取请求参数)
// * 3.处理数据并生成结果
// * 4.还可以设置合适的http响应参数
// * 5.将响应的信息发送给客户端
// *
// * 1.要想创建一个Servlet，那么就一定要继承HttpServlet
// * 2.要重写doGet/doPost方法。
// *      这两个方法什么时候会调用：如果客户端向服务器端发送的请求是get请求，那么就会自动去调用Servlet中的doGet()方法
// *                           如果客户端向服务器端发送的请求是post请求，那么就会自动去调用Servlet中的doPost()方法
// * 3.方法的参数：
// *      关于请求的方法
// *          http1.1支持多种请求方式:常用的方式 get(查询)  post(添加)  put(修改)   delete(删除)
// *      HttpServletRequest req  接口 ：这个接口无需我们自己初始化，服务器(Web容器)会自动将它进行初始化.
// *          这个接口中会提供一些方法：例如  获取一些请求的参数
// *      HttpServletRequest接口的作用：
// *          1.提取客户端请求的信息
// *              比如说：提取表单信息 req.getParameter("email");  提取http的头信息  cookie信息
// *          2.修改字符编码  req.setCharacterEncoding("utf-8");
// *          3.在服务器端来保存数据
// *          4.转换资源(资源的跳转) 转发以及重定向
// *
// *
// *
// *
// *      HttpServletResponse resp 接口 ：这个接口无需我们自己初始化，服务器(Web容器)会自动将它进行初始化.
// *           resp.setContentType("text/html;charset=utf-8");
// *
// *      以上的参数大家可以从网络上下载JavaEE6的开发文档：javax.servlet.http
// *
// * Servlet的生命周期：就是一个对象从它被创建开始一直到这个对象被销毁掉。
// * 三个阶段：
// * 1.初始化阶段 init()
// * 2.响应客户端请求的阶段  service()
// * 3.销毁阶段 destroy()
// *
// * JSP中的页面指令： page   include   taglib
// *
// * JSP中的动作标签：
// * <jsp:useBean id=""></jsp:useBean>
// * <jsp:setProperty name="" property=""></jsp:setProperty>
// * <jsp:getProperty name="" property=""/>
// *
// * JSP隐含对象:
// * request	HttpServletRequest类的实例-----------(常用)
// * response	HttpServletResponse类的实例
// * out	PrintWriter类的实例，用于把结果输出至网页上
// * session	HttpSession类的实例------------------(常用)
// * application	ServletContext类的实例，与应用上下文有关
// * config	ServletConfig类的实例
// * pageContext	PageContext类的实例，提供对JSP页面所有对象以及命名空间的访问
// * page	类似于Java类中的this关键字
// * Exception	Exception类的对象，代表发生错误的JSP页面中对应的异常对象
// *
// * 如果简化JSP页面：JSTL 标签库   EL表达式 来简化jsp页面
// * EL:它是jsp中一种简洁的数据访问语言，简化jsp的开发
// * 基本的语法： ${表达式}
// *
// * 1.可以使用EL表达式来访问作用域中(request)中的对象   ${对象名}
// * 2.可以使用EL表达式来访问javabean对象中的属性  ${对象名.属性名}
// *          req.setAttribute("admin",admin);    ${admin.username}
// * 3.可以使用EL表达式来访问数组   ${数组对象名[索引]}
// *      <%
// *      String[] array = {"aaa","bbb","ccc"}
// *          request.setAttribute("array",array);
// *      %>
// *      ${array[0]}
// *
// * 4.可以通过EL表达式提供的一些隐式对象(requestScope)来访问指定作用域中的对象  ${requestScope.对象名}
// *
// *
// * 在Web应用中如何处理乱码的问题
// * 1.需要在Servlet中设置请求和响应的编码方式
// * 2.在JSP的头部声明，统一输出字符集编码
// * 3.设置数据库的字符集
// *     String name = rs.getString("NAME");
// *     String username = new String(name.getBytes("ISO-8859-1"),"utf-8");
// * 4.如果有需要还可以设置服务器的字符集 conf/server.xml文件
// *      <Connector port="8080" URIEncoding="UTF-8">
// *
// *
// * Http协议：它是一种无状态的连接协议。
// *
// *
// * Web中的四个作用域：
// *  application > session > request > page(默认)
// *  application：保存在此作用域中的数据只有是服务器不关闭，保存在application中的数据会一直有效
// *  session：只要浏览器不关闭，数据会一直有效
// *
// *
// */


public class    LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务器端向客户端返回的内容的类型以及字符编码集
        resp.setContentType("text/html;charset=utf-8");
        //客户端向服务器器请求的字符编码集
        req.setCharacterEncoding("utf-8");
        HttpSession session = req.getSession();
        PrintWriter out = resp.getWriter();
        //如何获取到请求的参数 email=tom&password=123456
        String username = req.getParameter("username"); //tom
        String password = req.getParameter("password"); //123456
        //调用Service
        AdminService service = new AdminServiceimpl();
        Admin admin = service.isValidate(username,password);
        if(admin!=null){
            //将用户登录的名字保存到服务器端
            session.setAttribute("admin",admin);
//            req.getRequestDispatcher("/user/manager?q=list").forward(req,resp);
            resp.sendRedirect(req.getContextPath()+"/user/manager?q=list");
        }else {
            out.println("登录失败......");
        }

    }
}